package com.bsj.sipgateway.web.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.bsj.power.common.config.global.JsonResult;
import com.bsj.power.common.def.vo.video.file.*;
import com.bsj.sipgateway.web.service.IFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @author : zhuojie.c
 * @version V1.0
 * @Description: 文件上传
 * @date Date : 2024年08月12日
 * @menu 文件列表/上传模块
 */
@Slf4j
@RestController
@RequestMapping("/file")
//@RequestMapping("/video/file")
public class FileController {

    @Autowired
    @Qualifier("fileServiceImpl")
    IFileService fileServiceImpl;

    @Value("${fileTranscodeUrl}")
    String fileTranscodeUrl;

    /**
     * 文件上传
     *
     * @param file     视频文件
     * @param fileType 设备编号
     * @return
     */
    @PostMapping("/upload")
    public JsonResult upload(@Validated @NotNull(message = "文件不能为空！") MultipartFile file, @NotNull(message = "文件类型不能为空！") Integer fileType, String filename) {
        return fileServiceImpl.upload(file, fileType, filename);
    }

    /**
     * 新增文件记录
     *
     * @param fileAddVO
     * @return
     */
    @PostMapping("/addFile")
    public JsonResult<FileListVO> addFile(@Validated @RequestBody FileAddVO fileAddVO) {
        return fileServiceImpl.addFile(fileAddVO);
    }

    /**
     * 删除文件记录
     *
     * @param id
     * @return
     */
    @GetMapping("/deleteFile")
    public JsonResult deleteFile(@Validated @NotNull(message = "文件ID不为空") Long id) {
        return fileServiceImpl.deleteFile(id);
    }

    /**
     * 文件记录列表
     *
     * @param fileSearchVO
     * @return
     */
    @GetMapping("/fileList")
    public JsonResult<List<FileListVO>> fileList(@Validated FileSearchVO fileSearchVO) {
        return fileServiceImpl.fileList(fileSearchVO);
    }

    /**
     * 添加文件标记内容
     *
     * @param vo
     * @return
     */
    @PostMapping("/addMakeFile")
    public JsonResult addMakeFile(@Validated @RequestBody FileMakeAddVO vo) {
        return fileServiceImpl.addMakeFile(vo);
    }

    /**
     * 批量删除文件标记内容
     *
     * @param ids
     * @return
     */
    @GetMapping("/deleteMakeFile")
    public JsonResult deleteMakeFile(@Validated @NotNull(message = "文件标记ID集合不为空") Long[] ids) {
        return fileServiceImpl.deleteMakeFile(ids);
    }

    /**
     * 根据对应文件内容ID获取标记内容集合
     *
     * @param fileLogId
     * @return
     */
    @GetMapping("/makeFileList")
    public JsonResult<List<FileMakeListVO>> makeFileList(@Validated @NotNull(message = "文件标记ID不为空") Long fileLogId) {
        return fileServiceImpl.makeFileList(fileLogId);
    }

    /**
     * 文件转码
     *
     * @param filePath
     * @return
     */
    @GetMapping(value = "/file/transcodePro")
    public JsonResult transcode(String filePath) {
        String result = HttpRequest.get(fileTranscodeUrl + "?filePath=" + filePath)
                .header("content-type", "application/json")
                .execute().body();
        log.info("文件转码:{}",result);
        return JSON.parseObject(result, JsonResult.class);

    }


}
